import "reflect-metadata";
import {createConnection} from "typeorm";
import {User} from "./entity/User";
import {Posts} from "./entity/Posts"
import {Tags} from "./entity/Tags"

// 新增表 数据
// createConnection().then(async connection => {
//     // 创建一个用户
//     const user = new User();
//     user.username = '王五1';
//     user.password = '123456';
//
//     const userExtend = new UserExtend();
//     userExtend.mobile = '13412345678';
//     userExtend.address = '中国';
//     // 关联两个数据模型
//     userExtend.user = user;
//
//     // 必须先保存用户表,因为他要提供主键出来
//     const userRepository = connection.getRepository(User);
//     await userRepository.save(user);
//
//     const userExtendRepository = connection.getRepository(UserExtend);
//     await userExtendRepository.save(userExtend);
//     console.log('插入数据成功');
// }).catch(error => console.log(error));


/** ========================================================================== */
// 查询数据
// createConnection().then(async (connection) => {
//     // 使用relations关联查询数据(正向查找)
//     // const userRepository = connection.getRepository(User);
//     // // userDetail就是当前表中定义的字段
//     // const result = await userRepository.find({relations: ['userDetail']})
//
//     // 反向查询用户信息(一般一对一的关系中很少使用)
//     const userExtendRepository = connection.getRepository(UserExtend);
//     const result = await userExtendRepository.find({ relations: ['user'] });
//     console.log(result);
// }).catch((error) => {
//     console.log(error);
// })


/** ================ 评论实体 ============================================================ */
// 添加评论信息
// createConnection().then(async (connection) => {
//     // 帖子一
//     const posts1 = new Posts();
//     posts1.title = '文章一';
//     posts1.content = '文章一内容';
//
//     // 帖子二
//     const posts2 = new Posts();
//     posts2.title = '文章二';
//     posts2.content = '文章二内容';
//
//     // 创建一个用户
//     const user = new User();
//     user.username = '王五';
//     user.password = '123456';
//     user.posts = [posts1, posts2];
//
//     const userRepository = connection.getRepository(User);
//     const postsRepository = connection.getRepository(Posts);
//     await postsRepository.save(posts1);
//     await postsRepository.save(posts2);
//     await userRepository.save(user);
//     console.log('添加数据成功');
// }).catch((err) => console.log(err))


// 正向查询数据(从单对多的方向查询)
// createConnection().then(async (connection) => {
//     const userRepository = connection.getRepository(User);
//     // relations存放一个数组,可以存放多个关联关系的
//     const result = await userRepository.find({relations: ['posts']});
//     console.log(JSON.stringify(result));
//
// })

// 反向查询数据
// createConnection().then(async (connection) => {
//     const postsRepository = connection.getRepository(Posts);
//     const result = await postsRepository.find({ relations: ['user'] });
//     console.log(result);
// })

// 创建数据
// createConnection().then(async (connection) => {
//     // 创建 tag1
//     const tag1 = new Tags();
//     tag1.name = "mysql"
//
//     // 创建tag2
//     const tag2 = new Tags();
//     tag2.name = 'node';
//
//     // 帖子一
//     const posts1 = new Posts();
//     posts1.title = '文章一';
//     posts1.content = '文章一内容';
//     posts1.tags = [tag1, tag2];
//
//     // 帖子二
//     const posts2 = new Posts();
//     posts2.title = '文章二';
//     posts2.content = '文章二内容';
//     posts2.tags = [tag1];
//
//     // 创建一个用户
//     const user = new User();
//     user.username = '王五6';
//     user.password = '123456';
//     user.posts = [posts1, posts2];
//
//     const userRepository = connection.getRepository(User);
//     const postsRepository = connection.getRepository(Posts);
//     const tagRepository = connection.getRepository(Tags);
//     await tagRepository.save(tag1);
//     await tagRepository.save(tag2);
//
//     await postsRepository.save(posts1);
//     await postsRepository.save(posts2);
//     await userRepository.save(user);
//     console.log('添加数据成功');
// }).catch(error => console.log(error));

// 查询帖子及拥有的信息
createConnection().then(async (connection) => {
    // 创建 tag1
    const postsRepository = connection.getRepository(Posts);
    const result = await postsRepository.findOne({ where: { id: 1 }, relations: ['tags', 'user'] });
    console.log(result);
}).catch(error => console.log(error));


